package com.v2future.sjt.collegecheckingattendance.utils;

import java.math.BigDecimal;
import java.util.ArrayList;

public class CalculateUtil {

	/**  
     * 对double数据进行取精度.  
     * @param value  double数据.  
     * @param scale  精度位数(保留的小数位数).  
     * @param roundingMode  精度取值方式.  
     * @return 精度计算后的数据.  
     */  
    public static double round(double value, int scale, 
             int roundingMode) {   
        BigDecimal bd = new BigDecimal(value);
        bd = bd.setScale(scale, roundingMode);   
        double d = bd.doubleValue();   
        bd = null;   
        return d;   
    }   
    
    /** 
     * double 相加 
     * @param d1 
     * @param d2 
     * @return 
     */ 
    public static double sum(double d1,double d2){ 
        BigDecimal bd1 = new BigDecimal(Double.toString(d1));
        BigDecimal bd2 = new BigDecimal(Double.toString(d2));
        return bd1.add(bd2).doubleValue(); 
    } 
	
    /** 
     * double 相减 
     * @param d1 
     * @param d2 
     * @return 
     */ 
    public static double sub(double d1,double d2){ 
        BigDecimal bd1 = new BigDecimal(Double.toString(d1));
        BigDecimal bd2 = new BigDecimal(Double.toString(d2));
        return bd1.subtract(bd2).doubleValue(); 
    } 
    
	 /** 
     * double 乘法 
     * @param d1 
     * @param d2 
     * @return 
     */ 
    public static double mul(double d1,double d2){ 
        BigDecimal bd1 = new BigDecimal(Double.toString(d1));
        BigDecimal bd2 = new BigDecimal(Double.toString(d2));
        return bd1.multiply(bd2).doubleValue(); 
    } 
    
    /** 
     * double 除法 
     * @param d1 
     * @param d2 
     * @param scale 四舍五入 小数点位数 
     * @return 
     */ 
    public static double div(double d1,double d2,int scale){ 
        //  当然在此之前，你要判断分母是否为0，   
        //  为0你可以根据实际需求做相应的处理 

        BigDecimal bd1 = new BigDecimal(Double.toString(d1));
        BigDecimal bd2 = new BigDecimal(Double.toString(d2));
        return bd1.divide 
               (bd2,scale, BigDecimal.ROUND_HALF_UP).doubleValue();
    } 
    
    /**
     * 取消小数后面多余的0，并返回字符串
     * @param number
     * @return
     */
    public static String getFloatTail(String number){
    	boolean isLastZero = true;
    	String numberStr = number + "";
    	String[] numberSplits = numberStr.split("\\.");
    	if (numberSplits.length > 1) {//存在小数点
    		int tailNum = Integer.parseInt(numberSplits[1]);
			if (tailNum > 0) {
				byte[] bytes = numberSplits[1].getBytes();
				int sum = bytes.length;
				ArrayList<Byte> data = new ArrayList<Byte>();
				for (int i = 0; i < sum; i++) {
					if (bytes[sum - i - 1] == 48 && isLastZero) {//等于0，且是最后一个0

					}
					else {
						isLastZero = false;
						data.add(bytes[sum - i - 1]);
					}
				}
				byte[] bytes_new = new byte[data.size()];
				for (int i = 0; i < data.size(); i++) {
					bytes_new[data.size() - i - 1] = data.get(i);
				}
				numberStr = numberSplits[0] + "." + new String(bytes_new);
			}
			else if (tailNum == 0) {
				numberStr = numberSplits[0];
			}
			else {
				
			}
		}
    	else {
			numberStr = numberSplits[0];
		}
    	return numberStr;
//    	return number;
    }
}
